home *** CD-ROM | disk | FTP | other *** search
/ GameStar 2004 April / Gamestar_61_2004-04_dvdb.iso / DVDStar / Editace / hltp.exe / {app} / Applications / QuArK / quarkpy / dlgclasses.py < prev    next >
Text File  |  2004-01-05  |  7KB  |  244 lines

  1.  
  2. ######################################
  3. #
  4. #                  Dialog Classes
  5. #
  6. #              works with quark 5.10
  7. #          (and probably earlier versons)
  8. #
  9. ######################################
  10.  
  11. #$Header: /cvsroot/quark/runtime/quarkpy/dlgclasses.py,v 1.8 2003/12/18 21:51:46 peter-b Exp $
  12.  
  13.  
  14. import qmacro
  15. from maputils import *
  16.  
  17. class placepersistent_dialogbox(qmacro.dialogbox):
  18.   def __init__(self, form, src, label, **buttons):
  19.         name = self.name or self.__class__.__name__
  20.         self.label = label
  21.         qmacro.closedialogbox(name)
  22.         f = quarkx.newobj("Dlg:form")
  23.         f.loadtext(self.dlgdef)
  24.         self.f = f
  25.         for pybtn in f.findallsubitems("", ':py'):
  26.             pybtn["sendto"] = name
  27.         self.buttons = buttons
  28.         dlg = form.newfloating(self.dlgflags, f["Caption"])
  29.         qmacro.dialogboxes[name] = dlg
  30.         dlg.windowrect = self.windowrect()
  31.         if self.begincolor is not None: dlg.begincolor = self.begincolor
  32.         if self.endcolor is not None: dlg.endcolor = self.endcolor
  33.         dlg.onclose = self.onclose
  34.         dlg.info = self
  35.         self.dlg = dlg
  36.         self.src = src
  37.         df = dlg.mainpanel.newdataform()
  38.         self.df = df
  39.         df.header = 0
  40.         df.sep = self.dfsep
  41.         df.setdata(src, f)
  42.         df.onchange = self.datachange
  43.         df.flags = 8   # DF_AUTOFOCUS
  44.         dlg.show()
  45.      
  46.   def windowrect(self):
  47.     rect = quarkx.setupsubset(SS_MAP,"Options")['dlgdim_'+self.label]
  48.     if rect is not None:
  49.       return rect
  50.     x1,y1,x2,y2 = quarkx.screenrect()
  51.     dx = x1-x2
  52.     dy = y1-y2
  53.     cx = (x1+x2)/2
  54.     cy = (y1+y2)/2
  55.     size = self.size
  56.     return (cx-size[0]/2, cy-size[1]/2, cx+size[0]/2, cy+size[1]/2)
  57.  
  58.   def onclose(self, dlg):
  59.     quarkx.setupsubset(SS_MAP,"Options")['dlgdim_'+self.label] = self.dlg.windowrect
  60.     qmacro.dialogbox.onclose(self, dlg)
  61.  
  62. class LiveEditDlg (placepersistent_dialogbox):
  63.  
  64.     def __init__(self, form, label, editor, setup, action, onclosing=None):
  65.  
  66.     #
  67.     # General initialization of some local values
  68.     #
  69.  
  70.         self.editor = editor
  71.         
  72.         src = quarkx.newobj(":")
  73.         self.src = src
  74.         self.action = action
  75.         self.setup = setup
  76.         self.onclosing = onclosing
  77.         self.form = form
  78.         self.setup(self)
  79.         
  80.     #
  81.     # Create the dialog form and the buttons
  82.     #
  83.  
  84.         placepersistent_dialogbox.__init__(self, form, src, label,
  85.            exit = qtoolbar.button(
  86.             self.cancel,
  87.             "close dialog",
  88.             ico_editor, 0,
  89.             "Exit"))
  90.  
  91.     def cancel(self, dlg):
  92.         self.src = None
  93.         qmacro.dialogbox.close(self, dlg)
  94.  
  95.     def datachange(self, dlg):
  96.        quarkx.globalaccept()
  97.        self.action(self)
  98.        self.setup(self)
  99.        self.df.setdata(self.src, self.f)
  100.  
  101.     def onclose(self,dlg):
  102.         if self.onclosing is not None:
  103.             self.onclosing(self)
  104.         placepersistent_dialogbox.onclose(self,dlg)
  105.  
  106. #
  107. # A specialization of LiveEditDlg for running dialogs
  108. #   with PM-style buttons
  109. #
  110. class LiveButtonDlg(LiveEditDlg):
  111.  
  112.     def __init__(self, label, editor, setup, action, onclosing=None):
  113.         setattr(editor,'dlg_'+label,self)
  114.         LiveEditDlg.__init__(self,quarkx.clickform,label,editor,setup,action,onclosing)
  115.  
  116.     def onclose(self,dlg):
  117.         delattr(self.editor,'dlg_'+self.label)
  118.         LiveEditDlg.onclose(self,dlg)
  119.  
  120. class LiveBrowserDlg(LiveButtonDlg):
  121.  
  122.     endcolor = AQUA
  123.     size = (220,160)
  124.     dfsep = 0.35
  125.     dlgflags = FWF_KEEPFOCUS 
  126.  
  127.   
  128.     def __init__(self, label, editor, pack, moresetup=None, moreaction=None, onclosing=None):
  129.  
  130.  
  131.         self.moresetup=moresetup
  132.             
  133.         self.moreaction=moreaction
  134.                     
  135.         self.pack=pack
  136.         pack.seen = 0
  137.         
  138.         #
  139.         # im_func stuff needed because default values methods
  140.         #
  141.         LiveButtonDlg.__init__(self, label, editor, self.presetup.im_func, self.preaction.im_func, onclosing)
  142.         
  143.  
  144.     def presetup(self):
  145.          #
  146.          # Names and list-indexes of close planes
  147.          #
  148.          pack = self.pack
  149.          ran = range(len(pack.collected))
  150.          pack.slist = map(lambda obj, num:"%d) %s"%(num+1,obj.shortname), pack.collected, ran)
  151.          pack.klist = map(lambda d:`d`, ran)
  152.          self.src["collected$Items"] = "\015".join(pack.slist)
  153.          self.src["collected$Values"] = "\015".join(pack.klist)
  154.          if not pack.seen and len(ran)>0:
  155.              self.src["collected"] = '0'
  156.              self.chosen = '0'
  157.              pack.seen = 1
  158.          elif len(ran)==0:
  159.              self["collected"] = ''
  160.              self.chosen = ''
  161.          
  162.          #
  163.          # Note the commas, EF..1 controls take 1-tuples as data
  164.          #
  165.          self.src["num"]=len(pack.klist),
  166.          if self.moresetup is not None:
  167.              self.moresetup(self)
  168.  
  169.     def preaction(self):
  170.         self.chosen=self.pack.collected[eval(self.src["collected"])]
  171.         if self.moreaction is not None:
  172.             self.moreaction(self)
  173.     
  174. #
  175. # Like dialog box but with possiblity of specifying
  176. #   the location in the initialization.
  177. #
  178. class locatable_dialog_box(qmacro.dialogbox):
  179.   def __init__(self, form, src, px, py, **buttons):
  180.         self.px, self.py = px, py
  181.         name = self.name or self.__class__.__name__
  182.         qmacro.closedialogbox(name)
  183.         f = quarkx.newobj("Dlg:form")
  184.         f.loadtext(self.dlgdef)
  185.         for pybtn in f.findallsubitems("", ':py'):
  186.             pybtn["sendto"] = name
  187.         self.buttons = buttons
  188.         dlg = form.newfloating(self.dlgflags, f["Caption"])
  189.         qmacro.dialogboxes[name] = dlg
  190.         dlg.windowrect = self.windowrect()
  191.         if self.begincolor is not None: dlg.begincolor = self.begincolor
  192.         if self.endcolor is not None: dlg.endcolor = self.endcolor
  193.         dlg.onclose = self.onclose
  194.         dlg.info = self
  195.         self.dlg = dlg
  196.         self.src = src
  197.         df = dlg.mainpanel.newdataform()
  198.         self.df = df
  199.         df.header = 0
  200.         df.sep = self.dfsep
  201.         df.setdata(src, f)
  202.         df.onchange = self.datachange
  203.         df.flags = 8   # DF_AUTOFOCUS
  204.         dlg.show()
  205.      
  206.   def windowrect(self):
  207.     x1,y1,x2,y2 = quarkx.screenrect()
  208.     dx = x1-x2
  209.     dy = y1-y2
  210.     ox, oy = dx/self.px, dy/self.py
  211.     cx = (x1+x2)/2
  212.     cy = (y1+y2)/2
  213.     size = self.size
  214.     return (ox+cx-size[0]/2, oy+cy-size[1]/2, ox+cx+size[0]/2, oy+cy+size[1]/2)
  215.  
  216. # ----------- REVISION HISTORY ------------
  217. #
  218. #
  219. #$Log: dlgclasses.py,v $
  220. #Revision 1.8  2003/12/18 21:51:46  peter-b
  221. #Removed reliance on external string library from Python scripts (second try ;-)
  222. #
  223. #Revision 1.7  2002/05/21 10:23:28  tiglari
  224. #Make LiveBrowserDlg handle correctly multiple entries with the same name;
  225. #  Load first one.
  226. #
  227. #Revision 1.6  2001/08/05 08:01:37  tiglari
  228. #spiff up new descendents of LiveEditDlg
  229. #
  230. #Revision 1.5  2001/08/02 02:55:49  tiglari
  231. #List-browser dialog (ListerDlg)
  232. #
  233. #Revision 1.4  2000/10/10 07:57:53  tiglari
  234. #added onclosing support to LiveEditDlg (used in vertex movement dialog,
  235. # seems like a good idea).
  236. #
  237. #Revision 1.3  2000/06/03 18:01:28  alexander
  238. #added cvs header
  239. #
  240. #Revision 1.2  2000/06/02 16:00:22  alexander
  241. #added cvs headers
  242. #
  243. #
  244. #